/*
Nombre de la clase: Ann_Tsk_My_Controller
Autor: Elias Almanza Laguna
Objetivo de la clase: Proporcionar los metodos relacionados 
                        con el manejo de información de las
                        tareas en el portal del empleado.
                        En el portal del empleado cada usuario
                        solo puede ver las tareas que tiene
                        asignadas.
                        

*/

public class Ann_Tsk_My_Controller {

   /*
   *** Constructor de la clase ***
   - Se asigna el filtro a "All" para desplegar todas
        las tareas sin importar el estatus de la tarea.
   - Creamos la instancia de 'fieldContainer' el cual 
       es un objeto del que usamos 2 campos tipo Date
       para filtro de fechas en el despliegue de la
       lista de tareas.
   */
    public Ann_Tsk_My_Controller(){
       filtro = 'All';
       fieldContainer=new Field_Container__c();
    }

   
    
    public Field_Container__c fieldContainer{get;set;}
    
    
    private Ann_Tsk_My_Controller stdCtrl {get; set;} 
    
    private Id accountId;
    public String filtro {get;set;}
    public Date Date1 {get;set;}
    public Date Date2 {get;set;}
    public String Date1str {get;set;}
    public String Date2str {get;set;}
    
    private Id myUserId;
    private List<A_Task_User__c> tsk_u;
    private List<Id> ids;
    

    public Id getMyUserId() {return this.myUserId;  }
    //public void setmyUserId(Id myUserId) {this.myUserId = myUserId;}

    public List<A_Task_User__c> getTsk_u() {return this.tsk_u;}
    //public void setTsk_u(List<A_Task_User__c> tsk_u) {this.tsk_u = tsk_u;}

    public List<Id> getIds() {return this.ids;}
    //public void setIds(List<Id> ids) {this.ids = ids;}
    
    public List<A_Task__c> results{get;set;}
    
   
    
    /*
   *** Method geta_tasks() ***
   - Objetivo: Método para realizar una consulta del objeto A_Task__c,
               es decir, las tareas. La consulta tiene un filtro para
               que proporcione únicamente las tareas que estan relacionadas
               al usuario que solicita la consulta. La consulta se
               guarda en el objeto 'results'.
   */
    public void geta_tasks(){
        myUserId = UserInfo.getUserId();
      
        tsk_u = new List<A_Task_User__c>();
        tsk_u = [SELECT A_Task_User__c.Name, A_Task_User__c.Announcement_Task__c  
                    FROM A_Task_User__c 
                    WHERE A_Task_User__c.User__c = :myUserId                    
                    ];

        ids = new List<Id>();
        for(A_Task_User__c t_u : tsk_u){    
            ids.add(t_u.Announcement_Task__c);
        }  
                 
        if (filtro == 'All') {
            results = [SELECT Id, Name, Status__c, Due_Date__c,URL__c FROM A_Task__c WHERE (A_Task__c.Id IN :getids()) AND (A_Task__c.Id IN :ids) AND ( Due_Date__c>=:fieldContainer.Start_Date__c AND Due_Date__c<=:fieldContainer.End_Date__c ) ];
        } else {
            results = [SELECT Id, Name, Status__c, Due_Date__c,URL__c FROM A_Task__c WHERE (A_Task__c.Id IN :ids) AND (Status__c=:filtro) AND (A_Task__c.Id IN :ids) AND ( Due_Date__c>=:fieldContainer.Start_Date__c AND Due_Date__c<=:fieldContainer.End_Date__c ) ];
        }   
    }
    
  
      /*
   *** Method processRequests() ***
   - Objetivo: Método para realizar una consulta del objeto A_Task__c,
               es decir, las tareas. La consulta tiene un filtro para
               que proporcione únicamente las tareas que estan relacionadas
               al usuario que solicita la consulta. La consulta se
               guarda en el objeto 'results'. Este metodo tiene la misma
               función que 'geta_tasks()' pero 'processRequests()' se
               ejecuta cuando se realiza un cambio en el filtro de estatus,
               o bien, cuando se realiza la modificación de un registro.
   */
     public PageReference processRequests(){
        myUserId = UserInfo.getUserId();
      
        tsk_u = new List<A_Task_User__c>();
        tsk_u = [SELECT A_Task_User__c.Name, A_Task_User__c.Announcement_Task__c  FROM A_Task_User__c WHERE A_Task_User__c.User__c = :myUserId];

        ids = new List<Id>();
        for(A_Task_User__c t_u : tsk_u){    
            ids.add(t_u.Announcement_Task__c);
        }  
                 
        if (filtro == 'All') {
            results = [SELECT Id, Name, Status__c, Due_Date__c,Description__c, URL__c FROM A_Task__c WHERE (A_Task__c.Id IN :ids) AND (A_Task__c.Id IN :ids) AND ( Due_Date__c>=:fieldContainer.Start_Date__c AND Due_Date__c<=:fieldContainer.End_Date__c ) ];
        } else {
            results = [SELECT Id, Name, Status__c, Due_Date__c,Description__c, URL__c FROM A_Task__c WHERE (A_Task__c.Id IN :ids) AND (Status__c=:filtro) AND (A_Task__c.Id IN :ids) AND ( Due_Date__c>=:fieldContainer.Start_Date__c AND Due_Date__c<=:fieldContainer.End_Date__c ) ];
        }   
        return null;
    }
    
   /*
   *** Method save() ***
   - Objetivo: Método para guardar los cambios en los registros mostrados
               a través del objeto 'results'.
   */
   public PageReference save() {
       IF (results!=null){
           update results;
       }
       return null;
    }
  

}